home *** CD-ROM | disk | FTP | other *** search
/ System Booster / System Booster.iso / Archives / ARexxTools / CatUpdate100.lha / UpdateCT.rexx < prev   
Encoding:
OS/2 REXX Batch file  |  1993-09-30  |  4.4 KB  |  156 lines

  1. /* $VER: UpdateCT.rexx 01.00 (29.09.1993) © S.Sürken            */
  2. /*                                    */
  3. /* rx UpdateCT <CD-FILE> <OLD_CT-FILE> <NEW_CT-FILE>            */
  4. /*                                    */
  5. /* Updates a CT file referring to a given translation file.        */
  6. /*                                    */
  7. /* That means:                                */
  8. /* + Creating new head (update version & codeset)            */
  9. /*    (for that, the cd must have a head as comment, see example file)    */
  10. /* + Adding new strings (if there) to the translation file        */
  11. /*    (these strings get the default, preceded by "(*) ")        */
  12. /* + Deleting omitted strings (if there) from the translation file    */
  13. /* + Updating the default texts (as comments) of existing strings     */
  14. /*    if changed                            */
  15. /* + Providing the same order as in the description file        */
  16. /*                                    */
  17. /* :-( only normal codesetting allowed (no MSG_XXX (code/X/X))        */
  18. /*                                    */
  19.  
  20.  
  21. /* INITIALIZATION */
  22. toTranslateStr    = "(*)"
  23.  
  24. cdName        = WORD(ARG(1), 1)
  25. ctName        = WORD(ARG(1), 2)
  26. newCTName    = WORD(ARG(1), 3)
  27. /* END INITIALIZATION */
  28.  
  29. /* CHECK FOR SAME NAMES (ELSE INPUTS WOULD BE DELETED...) */
  30. IF (COMPARE(UPPER(cdName), UPPER(newCTName)) = 0) | (COMPARE(UPPER(ctName), UPPER(newCTName)) = 0)
  31.    THEN DO
  32.           SAY "Error: Input CD or CT name equals output CT file."; EXIT 10         /* error cancel */
  33.         END
  34. /* END CHECK FOR SAME NAMES */
  35.  
  36. /* CONTINUE WITH INIT? */
  37. SAY "Input  CD-File: "cdName
  38. SAY "Input  CT-File: "ctName
  39. SAY "New    CT-File: "newCTName
  40.  
  41. SAY "Sure to continue? "
  42. IF UPPER(READCH(STDIN, 1)) ~= "Y"
  43.    THEN DO
  44.           SAY "Cancelled."; EXIT 10         /* user cancel */
  45.         END
  46. /* END CONTINUE WITH INIT? */
  47.  
  48.  
  49. /* OPEN FILES */
  50. IF OPEN(cd, cdName, read) & OPEN(ct, ctName, read) & OPEN(newCT, newCTName, write)
  51.    THEN SAY "Files correctly opened."
  52.    ELSE DO
  53.           SAY "File error."; EXIT 10        /* error cancel */
  54.         END
  55. /* END OPEN FILES */
  56.  
  57. /* WRITE CT-HEAD */
  58. CALL WRITELN(newCT, "; Updatet catalog translation file ("DATE()")")
  59. CALL WRITELN(newCT, "; UpdateCT is © S.Sürken")
  60. CALL WRITELN(newCT, DELSTR(Find(cd, "; ## version"), 1, 2))    /* version from cd */
  61. CALL WRITELN(newCT, DELSTR(Find(cd, "; ## codeset"), 1, 2))    /* codeset from cd */
  62. CALL WRITELN(newCT, Find(ct, "## language"))            /* language from old ct */
  63. CALL WRITELN(newCT, ";")
  64. /* END WRITE CT-HEAD */
  65.  
  66. /* CREATE CLIPLIST (all found tokens of old ct file) */
  67. SAY "Creating clipboard list..."
  68. DO
  69.   SEEK(ct, 0, 'B')        /* start of file */
  70.   DO WHILE ~EOF(ct)
  71.      id = READLN(ct)
  72.  
  73.      IF (Kind(id) = 2) & (COMPARE(id, "") ~= 0)
  74.         THEN DO
  75.                SETCLIP(id, READLN(ct))
  76.              END
  77.  
  78.   END
  79. END
  80. /* END CREATE CLIPLIST */
  81.  
  82. /* GENERATE NEW CT */
  83. toTranslate    = 0        /* amount of strings to translate */
  84. code        = -1        /* current code */
  85. DO WHILE ~EOF(cd)
  86.    line = READLN(cd)
  87.  
  88.    IF Kind(line) = 2
  89.       THEN DO
  90.              id        = WORD(line, 1)
  91.  
  92.              cdText    = READLN(cd)
  93.  
  94.              IF COMPARE(id, "") ~= 0
  95.                 THEN DO
  96.                        code = code+1
  97.                        SAY "Updating Code "code": "id
  98.  
  99.                        CALL WRITELN(newCT, id)
  100.                        CALL WRITELN(newCT, GetTranslation(id, cdText))
  101.                        CALL WRITELN(newCT, "; "cdText)
  102.                        CALL WRITELN(newCT, ";")
  103.  
  104.                        /* remove translation from clip list */
  105.                        SETCLIP(id, "")
  106.                      END
  107.            END
  108. END
  109. /* END GENERATE NEW CT */
  110.  
  111. /* OUT STATUS */
  112. SAY ""
  113. SAY "Codes from 0 to "code", altogether "code+1" Strings."
  114. SAY "Found "toTranslate" strings to be translated."
  115. SAY ""
  116. /* END OUT STATUS */
  117.  
  118. EXIT 0            /* done exit */
  119.  
  120.  
  121. /* MACROS */
  122.  
  123. Kind: SELECT
  124.         WHEN POS("#", ARG(1)) = 1
  125.              THEN RETURN 0        /* a command */
  126.         WHEN POS(";", ARG(1)) = 1
  127.              THEN RETURN 1        /* a comment */
  128.         OTHERWISE RETURN 2        /* a relevant line */
  129.       END
  130.  
  131.  
  132. /* Find(file, id) --> line with id */
  133. Find: DO
  134.         SEEK(ARG(1), 0, 'B')        /* start of file */
  135.         DO WHILE ~EOF(ARG(1))
  136.            line = READLN(ARG(1))
  137.            IF POS(ARG(2), line) = 1
  138.               THEN RETURN line
  139.         END
  140.         RETURN ""
  141.       END
  142.  
  143. /* GetTranslation(id, original) --> translation */
  144. GetTranslation: DO
  145.                   translation = GETCLIP(ARG(1))
  146.                   IF COMPARE(translation, "") = 0
  147.                      THEN /* no translation found */
  148.                           DO
  149.                             toTranslate = toTranslate+1
  150.                             translation = toTranslateStr ARG(2)
  151.                           END
  152.                   RETURN translation
  153.                 END
  154.  
  155. /* END MACROS */
  156.